// 导入路由
/* eslint-disable */
import { Message } from 'element-ui'
import router from './router'
// 导入仓库
import store from './store'
import { removeToken } from './utils/auth'

// 声明白名单 不需要登录
const whiteList = ['/login', '/404']
// 注册导航守卫
router.beforeEach(async (to, from, next) => {
  const _token = store.getters.token
  // token判断
  if (_token) {
    // 用户信息的判断
    // console.log('userInfo:', store.getters.userInfo)
    if (store.getters.isLogin && to.path === '/login') {
      // 有 token 有用户信息 别去登录了 去首页
      return next('/')
    }
    // 去的不是登录 用户信息存在
    if (store.getters.isLogin) {
      // 有 token 有用户信息 放走
      return next()
    }
    // 用户信息不存在 token存在
    try {
      // 尝试获取一下
      await store.dispatch('user/getUserInfo')
      // 信息获取到了
      await store.dispatch('permission/filterRoutes')
      // 到这 说明 token 没有问题
      // if (to.path === '/login') {
      //   // 去首页
      //   return next('/')
      // }
      // 不是去登录页，正常放走
      // ----设置为 to 让 守卫重走一边 确保路由加载完毕-------
      return next(to)
      // console.log('用户信息获取完毕')
      // console.log('userInfo:', store.getters.userInfo)
    } catch (error) {
      // token存在 有问题
      // 删除token
      // removeToken()
      store.dispatch('user/logout')
      // 提示用户
      Message.error('请重新登录')
      // 去登录
      if (to.path === '/login') {
        // 是登录 直接去
        return next()
      }
      // 不是登录页 打回登录页
      // fullPath 可以获取 /xxx?key=value
      // path 纸可以获取 /xxx
      return next('/login?redirect=' + to.fullPath)
      // console.log('请求出错')
      // console.dir(error)
    }

    // 有 token 对还是错不知道
    // if (to.path === '/login') {
    //   // 没必要 直接去 首页
    //   return next('/')
    // }
    // // 不是登录页
    // return next()
  }
  // 没有token 白名单
  // includes 存在 true 不存在 false
  if (whiteList.includes(to.path)) {
    return next()
  }
  // 不在白名单中 没有token
  next('/login')
})
